package ipdesk.model.report.promote.action;


import ipdesk.model.report.consult.dao.ConsultInfoDao;
import ipdesk.model.report.promote.bean.PromoteInfoBean;
import ipdesk.model.report.promote.dao.PromoteInfoDao;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

import ecg.util.FileService;
import ecg.util.Time;

public class PromoteInfoRegAction extends ActionSupport implements Preparable, ModelDriven<PromoteInfoBean>
{

	private PromoteInfoBean promoteInfoBean;
	FileService fileService = new FileService();
	
	// 상세보기 뷰페이지에서 사용되는 도메인 객체
	private PromoteInfoBean promoteInfoDetail;
	
	/**
	 * 홍보실적 등록
	 */
	public String execute() throws Exception
	{
		String uplodaPathPrefix = getText("path.upload.prefix");
		String basePath = getText("path.upload.promote");
		String totalPath = uplodaPathPrefix + basePath;
		
		String regTime = Time.getDateTime();
		String uploadFileName = promoteInfoBean.getUploadFileName();
		
		String realFileName = fileService.saveFile(promoteInfoBean.getUpload(), totalPath, uploadFileName);
		
		promoteInfoBean.setUploadFileName(realFileName);
		promoteInfoBean.setPathName(basePath);
		promoteInfoBean.setRegTime(regTime);
		promoteInfoBean.setPromoteContent(promoteInfoBean.getPromoteContent());
		
	
		// 홍보실적 정보 insert.
		int lastPromoteSeq = PromoteInfoDao.getInstance().promoteInfoReg(promoteInfoBean);
	
		// 마지막으로 insert된 channel_seq 값을 빈 객체에 저장.		
		promoteInfoBean.setPromoteSeq(lastPromoteSeq);
	
		if(lastPromoteSeq != 0 && promoteInfoBean.getUpload() != null)
		{
			PromoteInfoDao.getInstance().insertFileData(promoteInfoBean);
		}
			
		
		return SUCCESS;
	}
	
	/**
	 * 홍보실적 수정 폼 액션
	 */
	public String executeModifyForm() throws Exception
	{
		/**
		 * 넘어온 promoteSeq를 조건으로 DB에서 데이터를 가져온다.
		 */
		int promoteSeq = promoteInfoBean.getPromoteSeq();
		
		promoteInfoDetail = PromoteInfoDao.getInstance().getModifyData(promoteSeq);
		
		return SUCCESS;
	}
	
	
	/**
	 * 홍보실적 수정 액션 처리
	 */
	public String executeModify() throws Exception
	{
		/**
		 * 	1. 넘어온 컨설팅 번호를 조건으로 업로드된 데이터가 있는지 여부를 확인한다.
		 */
		int promoteSeq = promoteInfoBean.getPromoteSeq();
		
		PromoteInfoBean promoteUploadBean = PromoteInfoDao.getInstance().getUploadData(promoteSeq);
		
		// 수정모드에서 파일 업로드를 하는경우중에서
		if(promoteInfoBean.getUpload() != null && (!promoteInfoBean.getUpload().getName().equals("")))
		{
			// 기존에 업로드 된 파일이 존재한다면 기존 파일 삭제처리,  기존 데이터 삭제처리.
			if(promoteUploadBean != null)
			{
				// DB에서 가지고 온 파일에 대한 삭제 처리.
				String fileName = promoteUploadBean.getUploadFileName();
				String pathName = promoteUploadBean.getPathName();
				
				fileService.deleteFile(pathName + fileName);
				
				
				PromoteInfoDao.getInstance().deleteDataOneRow(promoteSeq);
			}
		}
		
		
		// 데이터 업데이트, 파일 업로드 처리.
		String uplodaPathPrefix = getText("path.upload.prefix");
		String basePath = getText("path.upload.promote");
		String totalPath = uplodaPathPrefix + basePath;
		
		String regTime = Time.getDateTime();
		String modifyTime = Time.getDateTime();
		String uploadFileName = promoteInfoBean.getUploadFileName();
		
				
		String realFileName = fileService.saveFile(promoteInfoBean.getUpload(), totalPath, uploadFileName);
		
		
		promoteInfoBean.setUploadFileName(realFileName);
		promoteInfoBean.setPathName(basePath);
		promoteInfoBean.setRegTime(regTime);
		promoteInfoBean.setModifyTime(modifyTime);
		
		
		// 홍보실적 update
		int result = PromoteInfoDao.getInstance().promoteInfoUpdate(promoteInfoBean);
	
		return SUCCESS;
	}
	
	/**
	 * 파일 삭제 액션
	 * @return
	 */
	public String executeFileDelete() throws Exception
	{
		/**
		 * 1. 해당 promoteSeq의 path와 file name을 가지고 온다.
		 * 2. 테이블의 파일 데이터를 지운다.
		 * 3. 업로드 데이터를 지운다.
		 */
		boolean delFlag = PromoteInfoDao.getInstance().fileDelete(promoteInfoBean.getPromoteSeq());
		
		return SUCCESS;
	}
	
	
	/**
	 * 데이터 삭제 액션
	 * 
	 */
	public String executeDelete() throws Exception
	{
		/**
		 * 1. 해당 promoteSeq의 path와 file name을 가지고 온다.
		 * 2. 테이블의 파일 데이터를 지운다.
		 * 3. consult 데이터를 지운다.
		 * 4. 업로드 데이터를 지운다.
		 */
		
		boolean delFlag = PromoteInfoDao.getInstance().promoteInfoDelete(promoteInfoBean.getPromoteSeq());
		
		return SUCCESS;
	}
	
	public PromoteInfoBean getPromoteInfoDetail()
	{
		return promoteInfoDetail;
	}

	public void setPromoteInfoDetail(PromoteInfoBean promoteInfoDetail)
	{
		this.promoteInfoDetail = promoteInfoDetail;
	}

	public void prepare() throws Exception
	{
		promoteInfoBean = new PromoteInfoBean();
	}
	
	public PromoteInfoBean getModel()
	{
		return promoteInfoBean;
	}
	
	/*public void validate()
	{
		String contentType = promoteInfoBean.getUploadContentType();
		long fileSize = 0;
		
		if(promoteInfoBean.getUpload() != null)
		{
			fileSize = promoteInfoBean.getUpload().length();
		}
		
		if(!fileService.contentTypeValidate(contentType))
		{
			addFieldError("upload", "업로드할 수 없는 파일 형식입니다");
			return;
		}
		
		
		if(fileSize > Long.parseLong(getText("upload.size")))
		{
			System.out.println(fileSize);
			addFieldError("upload", "업로드 용량을 초과하였습니다.");
			return;
		}
	}*/
	
	
}
